home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 80 / XENIATGM80.iso / Goodies / Blood 2 / Source / data.z / cpp_servershell_de.h < prev    next >
C/C++ Source or Header  |  1999-04-02  |  8KB  |  267 lines

  1. // ----------------------------------------------------------------------- //
  2. //
  3. // MODULE  : CPP_SERVERSHELL_DE.H
  4. //
  5. // PURPOSE : C++ DE server shell class definition
  6. //
  7. // CREATED : 9/17/97
  8. //
  9. // ----------------------------------------------------------------------- //
  10.  
  11. #ifndef __CPP_SERVERSHELL_DE_H__
  12. #define __CPP_SERVERSHELL_DE_H__
  13.  
  14. #include <stdlib.h>
  15. #include "servershell_de.h"
  16.  
  17. // Forward declarations...
  18.  
  19. class BaseClass;
  20. class ServerDE;
  21.  
  22. /////////////////////////////////////////////////////////////////////
  23. // C++ ServerShellDE interface.  Derive your server object from this.
  24. /////////////////////////////////////////////////////////////////////
  25.  
  26. class CServerShellDE
  27. {
  28.     public :
  29.  
  30.         CServerShellDE();
  31.         virtual ~CServerShellDE() {}
  32.  
  33.         ServerDE* GetServerDE() const;
  34.  
  35.     protected :  // These methods should be over-written
  36.  
  37.         virtual DRESULT    ServerAppMessageFn(char *pMsg) {return LT_OK;}
  38.  
  39.         // Notification when new clients come in.
  40.         // You must create an object to represent the client.
  41.         // It uses the object's position to determine what the client can see.
  42.         virtual void    OnAddClient(HCLIENT hClient) {}
  43.         virtual void    OnRemoveClient(HCLIENT hClient) {}
  44.  
  45.         virtual LPBASECLASS    OnClientEnterWorld(HCLIENT hClient, void *pClientData, DDWORD clientDataLen)=0;
  46.         virtual void        OnClientExitWorld(HCLIENT hClient) {}
  47.  
  48.         // Called before and after you switch worlds.
  49.         virtual void    PreStartWorld(DBOOL bSwitchingWorlds) {}
  50.         virtual void    PostStartWorld() {}        
  51.  
  52.         // Incoming message notification.
  53.         virtual void OnMessage(HCLIENT hSender, DBYTE messageID, HMESSAGEREAD hMessage) {}
  54.         virtual void OnObjectMessage(LPBASECLASS pSender, DDWORD messageID, HMESSAGEREAD hMessage) {}        
  55.  
  56.         // Command notification.
  57.         virtual void    OnCommandOn(HCLIENT hClient, int command) {}
  58.         virtual void    OnCommandOff(HCLIENT hClient, int command) {}
  59.  
  60.         // Update loop callback.. do whatever you like in here.
  61.         // Time since the last Update() call is passed in.
  62.         virtual void    Update(DFLOAT timeElapsed) {}
  63.  
  64.         virtual void    OnPlaybackFinish() {}
  65.  
  66.         virtual void    CacheFiles() {}
  67.  
  68.         virtual void    SRand() {srand(123);}
  69.  
  70.  
  71.     private :  // Data members
  72.  
  73.         // VERY Important that this first data member.  Pointers to this class and
  74.         // pointers to CServerShellDE::m_serverShell MUST BE the same. 
  75.         ServerShellDE    m_serverShell;  
  76.  
  77.  
  78.     private :
  79.  
  80.         // The following static functions are called by the server, and should
  81.         // NOT be called directly.
  82.         static DRESULT _ServerAppMessageFn(struct ServerShellDE_t *pShell, char *pMsg);
  83.         
  84.         static void _OnAddClient(struct ServerShellDE_t *pShell, HCLIENT hClient);
  85.         static void _OnRemoveClient(struct ServerShellDE_t *pShell, HCLIENT hClient);
  86.  
  87.         static LPBASECLASS _OnClientEnterWorld(struct ServerShellDE_t *pShell, HCLIENT hClient, void *pClientData, DDWORD clientDataLen);
  88.         static void _OnClientExitWorld(struct ServerShellDE_t *pShell, HCLIENT hClient);
  89.  
  90.         static void _PreStartWorld(struct ServerShellDE_t *pShell, DBOOL bSwitchingWorlds);
  91.         static void _PostStartWorld(struct ServerShellDE_t *pShell);
  92.         static void _OnMessage(struct ServerShellDE_t *pShell, HCLIENT hSender, DBYTE messageID, HMESSAGEREAD hMessage);
  93.         static void    _OnObjectMessage(struct ServerShellDE_t *pShell, LPBASECLASS pSender, DDWORD messageID, HMESSAGEREAD hMessage);
  94.         static void _OnCommandOn(struct ServerShellDE_t *pShell, HCLIENT hClient, int command);
  95.         static void _OnCommandOff(struct ServerShellDE_t *pShell, HCLIENT hClient, int command);
  96.         static void _Update(struct ServerShellDE_t *pShell, DFLOAT timeElapsed);
  97.         static void    _OnPlaybackFinish(struct ServerShellDE_t *pShell);
  98.         static void    _CacheFiles(struct ServerShellDE_t *pShell);
  99.         static void _SRand(struct ServerShellDE_t *pShell);
  100.         
  101. };
  102.  
  103.  
  104. // Inlines...
  105.  
  106. INLINE_FN CServerShellDE::CServerShellDE()
  107. {
  108.     // Set up ServerShellDE function pointers...
  109.     m_serverShell.ServerAppMessageFn = _ServerAppMessageFn;
  110.     m_serverShell.OnAddClient        = _OnAddClient;
  111.     m_serverShell.OnRemoveClient    = _OnRemoveClient;
  112.     m_serverShell.OnClientEnterWorld = _OnClientEnterWorld;
  113.     m_serverShell.OnClientExitWorld = _OnClientExitWorld;
  114.     m_serverShell.PreStartWorld        = _PreStartWorld;
  115.     m_serverShell.PostStartWorld    = _PostStartWorld;
  116.     m_serverShell.OnMessage            = _OnMessage;
  117.     m_serverShell.OnObjectMessage    = _OnObjectMessage;
  118.     m_serverShell.OnCommandOn        = _OnCommandOn;
  119.     m_serverShell.OnCommandOff        = _OnCommandOff;
  120.     m_serverShell.Update            = _Update;
  121.     m_serverShell.OnPlaybackFinish    = _OnPlaybackFinish;
  122.     m_serverShell.CacheFiles        = _CacheFiles;
  123.     m_serverShell.SRand                = _SRand;
  124. }
  125.  
  126.  
  127. INLINE_FN CServerDE* CServerShellDE::GetServerDE() const
  128.     return (CServerDE*)g_pServerDE;
  129. }
  130.  
  131.  
  132. INLINE_FN DRESULT CServerShellDE::_ServerAppMessageFn(struct ServerShellDE_t *pShell, char *pMsg)
  133. {
  134.     return ((CServerShellDE*)pShell)->ServerAppMessageFn(pMsg);
  135. }
  136.  
  137.  
  138. INLINE_FN void CServerShellDE::_OnAddClient(struct ServerShellDE_t *pShell, HCLIENT hClient)
  139. {
  140.     if (pShell)
  141.     {
  142.         CServerShellDE *pCSShell = (CServerShellDE*)pShell;
  143.         pCSShell->OnAddClient(hClient);
  144.     }
  145. }
  146.  
  147. INLINE_FN void CServerShellDE::_OnRemoveClient(struct ServerShellDE_t *pShell, HCLIENT hClient)
  148. {
  149.     if (pShell)
  150.     {
  151.         CServerShellDE *pCSShell = (CServerShellDE*)pShell;
  152.         pCSShell->OnRemoveClient(hClient);
  153.     }
  154. }
  155.  
  156. INLINE_FN LPBASECLASS CServerShellDE::_OnClientEnterWorld(struct ServerShellDE_t *pShell, HCLIENT hClient, void *pClientData, DDWORD clientDataLen)
  157. {
  158.     if (pShell)
  159.     {
  160.         CServerShellDE *pCSShell = (CServerShellDE*)pShell;
  161.         return (LPBASECLASS)pCSShell->OnClientEnterWorld(hClient, pClientData, clientDataLen);
  162.     }
  163.  
  164.     return NULL;
  165. }
  166.  
  167. INLINE_FN void CServerShellDE::_OnClientExitWorld(struct ServerShellDE_t *pShell, HCLIENT hClient)
  168. {
  169.     if (pShell)
  170.     {
  171.         CServerShellDE *pCSShell = (CServerShellDE*)pShell;
  172.         pCSShell->OnClientExitWorld(hClient);
  173.     }
  174. }
  175.  
  176. INLINE_FN void CServerShellDE::_PreStartWorld(struct ServerShellDE_t *pShell, DBOOL bSwitchingWorlds)
  177. {
  178.     if (pShell)
  179.     {
  180.         CServerShellDE *pCSShell = (CServerShellDE*)pShell;
  181.         pCSShell->PreStartWorld(bSwitchingWorlds);
  182.     }
  183. }
  184.  
  185. INLINE_FN void CServerShellDE::_PostStartWorld(struct ServerShellDE_t *pShell)
  186. {
  187.     if (pShell)
  188.     {
  189.         CServerShellDE *pCSShell = (CServerShellDE*)pShell;
  190.         pCSShell->PostStartWorld();
  191.     }
  192. }
  193.  
  194. INLINE_FN void CServerShellDE::_OnMessage(struct ServerShellDE_t *pShell, HCLIENT hSender, DBYTE messageID, HMESSAGEREAD hMessage)
  195. {
  196.     if (pShell)
  197.     {
  198.         CServerShellDE *pCSShell = (CServerShellDE*)pShell;
  199.         pCSShell->OnMessage(hSender, messageID, hMessage);
  200.     }
  201. }
  202.  
  203. INLINE_FN void CServerShellDE::_OnObjectMessage(struct ServerShellDE_t *pShell, LPBASECLASS pSender, DDWORD messageID, HMESSAGEREAD hMessage)
  204. {
  205.     if(pShell)
  206.     {
  207.         CServerShellDE *pCSShell = (CServerShellDE*)pShell;
  208.         pCSShell->OnObjectMessage(pSender, messageID, hMessage);
  209.     }
  210. }
  211.  
  212. INLINE_FN void CServerShellDE::_OnCommandOn(struct ServerShellDE_t *pShell, HCLIENT hClient, int command)
  213. {
  214.     if (pShell)
  215.     {
  216.         CServerShellDE *pCSShell = (CServerShellDE*)pShell;
  217.         pCSShell->OnCommandOn(hClient, command);
  218.     }
  219. }
  220.  
  221. INLINE_FN void CServerShellDE::_OnCommandOff(struct ServerShellDE_t *pShell, HCLIENT hClient, int command)
  222. {
  223.     if (pShell)
  224.     {
  225.         CServerShellDE *pCSShell = (CServerShellDE*)pShell;
  226.         pCSShell->OnCommandOff(hClient, command);
  227.     }
  228. }
  229.  
  230. INLINE_FN void CServerShellDE::_Update(struct ServerShellDE_t *pShell, DFLOAT timeElapsed)
  231. {
  232.     if (pShell)
  233.     {
  234.         CServerShellDE *pCSShell = (CServerShellDE*)pShell;
  235.         pCSShell->Update(timeElapsed);
  236.     }
  237. }
  238.  
  239. INLINE_FN void CServerShellDE::_OnPlaybackFinish(struct ServerShellDE_t *pShell)
  240. {
  241.     if (pShell)
  242.     {
  243.         CServerShellDE *pCSShell = (CServerShellDE*)pShell;
  244.         pCSShell->OnPlaybackFinish();
  245.     }
  246. }
  247.  
  248. INLINE_FN void CServerShellDE::_SRand(struct ServerShellDE_t *pShell)
  249. {
  250.     if (pShell)
  251.     {
  252.         CServerShellDE *pCSShell = (CServerShellDE*)pShell;
  253.         pCSShell->SRand();
  254.     }
  255. }
  256.  
  257. INLINE_FN void CServerShellDE::_CacheFiles(struct ServerShellDE_t *pShell)
  258. {
  259.     ((CServerShellDE*)pShell)->CacheFiles();
  260. }
  261.  
  262.  
  263. #endif  // __CPP_SERVERSHELL_DE_H__
  264.  
  265.  
  266.